import org.junit.jupiter.api.Test;

import java.lang.reflect.Array;
import java.util.*;

/**
 * 主要就是避免重复
 *暴力方法的话可以将符合要求的数组进行排序，然后放入list和set，list是用来返回数据的
 * set用来避免重复的，我们将list排序后转为string，判断set里面是否含有当前的数组，存在就不将当前list不存入结果集
 * 不存在就加入结果集
 */
public class _15_三数之和 {
    @Test
    void test(){
        int []nums = {-1,0,1,2,-1,-4};
        System.out.println(threeSum(nums));
    }


    public List<List<Integer>> threeSum(int[] nums) {
        List<List<Integer>> res=new ArrayList<>();
        if (nums.length<3||nums==null){
            return res;
        }
        Set set=new HashSet();
        for (int i = 0; i < nums.length; i++) {
            for (int j = i+1; j < nums.length; j++) {
                for (int k = j+1; k < nums.length; k++) {
                    if (nums[i]+nums[j]+nums[k]==0){
                        List<Integer> integers = Arrays.asList(nums[i], nums[j], nums[k]);
                        Collections.sort(integers);
                        String s = integers.toString();
                        if (!set.contains(s)){
                            set.add(s);
                            res.add(integers);
                        }

                    }
                }
            }
        }
        return res;
    }
}
